#ifndef OVERLAYDICT_H
#define OVERLAYDICT_H

///////////////////////////////////////////////////////////////////////////
// TExpression ////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
//
class TOvrExpression
{
public:
	TOvrExpression(): onlyFirst(false), onPrinter(true) {};
	TOvrExpression( const QString &str, bool oFirst = false, bool oPrinter = true ): name(str), onlyFirst(oFirst), onPrinter(oPrinter) {}
	//
	QString name;
	bool onlyFirst;
	bool onPrinter;
};

class TOvrCorner
{
public:
	bool hasName( QString name )	const;
	QStringList getNames()			const;
	//
	void addExpr( TOvrExpression &expr );
	int indexOf( QString name );
	TOvrExpression takeExpr( int index );
	TOvrExpression takeExpr( QString name );
	//
	QList<TOvrExpression> eList;
};

class TOvrMod
{
public:
	enum EPos
	{
		EInvalidPos = 0
	,	ELeftTop
	,	ELeftBottom
	,	ERightTop
	,	ERightBottom
	};
	//
	static EPos			stringToEPos( QString &hPos, QString &vPos );
	static QStringList	EPosToString( EPos );
	static QString		EPosToLitString( EPos );
	//
	TOvrMod();
	TOvrMod( QString name );
	//
	EPos	findName( const QString &name ) const;
	TOvrCorner &corner( EPos pos);
	QStringList expressions( EPos pos, bool firstPage, bool printer = false );
	void clear();
	//
	QString modality;
	QMap< EPos, TOvrCorner > corners;

private:
	void genCorners();
};


///////////////////////////////////////////////////////////////////////////
// TExpressionDict ////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
//
class TOverlayDict
{
public:
	static TOverlayDict *getDict();
public:
	bool loadDict( QString path );
	bool saveDict( QString path );
	void updateMod( TOvrMod &newV );
	void createMod( QString name );
	void deleteMod( QString name );
	//
	QStringList getModalityList();
	const TOvrMod &getMod( QString mod ) { return modMap[mod]; }

private:
	QMap <QString, TOvrMod> modMap;
};


#endif //OVERLAYDICT_H